using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools
{
    /// <summary>
    /// <para>Export Diagram Content</para>
    /// <para>Exports diagram content in a simple format (JSON) that reflects basic connectivity. Additional optional information such as diagram properties, diagram feature geometry, network elements attributes, and aggregated elements can also be exported.</para>
    /// <para>以反映基本连通性的简单格式 （JSON） 导出图表内容。还可以导出其他可选信息，例如逻辑示意图属性、逻辑示意图要素几何、网络元素属性和聚合元素。</para>
    /// </summary>    
    [DisplayName("Export Diagram Content")]
    public class ExportDiagramContent : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportDiagramContent()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Network or Network Diagram Layer</para>
        /// <para>The utility network or trace network layer, utility network or trace network data element, or network diagram layer related to the network diagram to export.</para>
        /// <para>公共设施网络或追踪网络图层、公共设施网络或追踪网络数据元素或与要导出的网络逻辑示意图相关的网络逻辑示意图图层。</para>
        /// </param>
        /// <param name="_network_diagram_name">
        /// <para>Network Diagram Name</para>
        /// <para>The name of the network diagram to export.</para>
        /// <para>要导出的网络逻辑示意图的名称。</para>
        /// </param>
        /// <param name="_out_file">
        /// <para>Output File</para>
        /// <para>The output .json file that will be created with the exported diagram content.</para>
        /// <para>输出.json将使用导出的逻辑示意图内容创建的文件。</para>
        /// </param>
        public ExportDiagramContent(object _in_utility_network, object _network_diagram_name, object _out_file)
        {
            this._in_utility_network = _in_utility_network;
            this._network_diagram_name = _network_diagram_name;
            this._out_file = _out_file;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Export Diagram Content";

        public override string CallName => "nd.ExportDiagramContent";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _network_diagram_name, _out_file, _include_diagram_properties.GetGPValue(), _include_geometries.GetGPValue(), _include_attributes.GetGPValue(), _include_aggregations.GetGPValue(), _use_domains.GetGPValue()];

        /// <summary>
        /// <para>Input Network or Network Diagram Layer</para>
        /// <para>The utility network or trace network layer, utility network or trace network data element, or network diagram layer related to the network diagram to export.</para>
        /// <para>公共设施网络或追踪网络图层、公共设施网络或追踪网络数据元素或与要导出的网络逻辑示意图相关的网络逻辑示意图图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network or Network Diagram Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Network Diagram Name</para>
        /// <para>The name of the network diagram to export.</para>
        /// <para>要导出的网络逻辑示意图的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Diagram Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _network_diagram_name { get; set; }


        /// <summary>
        /// <para>Output File</para>
        /// <para>The output .json file that will be created with the exported diagram content.</para>
        /// <para>输出.json将使用导出的逻辑示意图内容创建的文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_file { get; set; }


        /// <summary>
        /// <para>Include diagram properties</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the diagram properties will be exported.
        ///   <bulletList>
        ///     <bullet_item>Checked—The diagram properties (statistics, creation and update dates, and so on) will be exported.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The diagram properties will not be exported. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否导出关系图属性。
        ///   <bulletList>
        ///     <bullet_item>选中 - 将输出逻辑示意图属性（统计数据、创建日期和更新日期等）。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会导出逻辑示意图属性。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include diagram properties")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _include_diagram_properties_value _include_diagram_properties { get; set; } = _include_diagram_properties_value._false;

        public enum _include_diagram_properties_value
        {
            /// <summary>
            /// <para>INCLUDE_DIAGRAM_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_DIAGRAM_PROPERTIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_DIAGRAM_PROPERTIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_DIAGRAM_PROPERTIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Include geometries</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the geometry of the diagram features will be exported.
        ///   <bulletList>
        ///     <bullet_item>Checked—Each diagram feature will be exported with its geometry.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Each diagram feature will be exported without its geometry. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否导出逻辑示意图要素的几何。
        ///   <bulletList>
        ///     <bullet_item>选中 - 每个逻辑示意图要素将与其几何一起输出。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将输出每个逻辑示意图要素，而不显示其几何。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include geometries")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _include_geometries_value _include_geometries { get; set; } = _include_geometries_value._false;

        public enum _include_geometries_value
        {
            /// <summary>
            /// <para>INCLUDE_GEOMETRIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_GEOMETRIES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_GEOMETRIES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_GEOMETRIES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Include attributes</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the attributes of the associated network elements will be exported.
        ///   <bulletList>
        ///     <bullet_item>Checked—The associated network element attributes will be exported.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The associated network element attributes will not be exported. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否导出关联网络元素的属性。
        ///   <bulletList>
        ///     <bullet_item>选中 - 将导出关联的网元属性。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将不导出关联的网元属性。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include attributes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _include_attributes_value _include_attributes { get; set; } = _include_attributes_value._false;

        public enum _include_attributes_value
        {
            /// <summary>
            /// <para>INCLUDE_ATTRIBUTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_ATTRIBUTES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_ATTRIBUTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_ATTRIBUTES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Include aggregations</para>
        /// <para><xdoc>
        ///   <para>Specifies whether each diagram feature will be exported with a list of network elements it aggregates.
        ///   <bulletList>
        ///     <bullet_item>Checked—Each diagram feature will be exported with a list of network elements it aggregates with their asset group and asset type values.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The diagram feature aggregations will not be exported. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否将每个逻辑示意图要素与其聚合的网络元素列表一起导出。
        ///   <bulletList>
        ///     <bullet_item>选中 - 每个逻辑示意图要素将随其聚合的网络元素列表及其资产组和资产类型值一起导出。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会导出逻辑示意图要素聚合。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include aggregations")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _include_aggregations_value _include_aggregations { get; set; } = _include_aggregations_value._false;

        public enum _include_aggregations_value
        {
            /// <summary>
            /// <para>INCLUDE_AGGREGATIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_AGGREGATIONS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_AGGREGATIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_AGGREGATIONS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Use domain and subtype descriptions</para>
        /// <para><xdoc>
        ///   <para>Specifies how coded domain and subtype values will be exported. This parameter is enabled when the Include attributes or Include aggregations parameter is checked.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Coded domain and subtype values will be exported using their string descriptions rather than raw values.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Coded domain and subtype values will be exported as raw values. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何导出编码的域和子类型值。选中“包含属性”或“包含聚合”参数时，将启用此参数。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 编码属性域和子类型值将使用其字符串描述（而不是原始值）导出。</bullet_item><para/>
        ///     <bullet_item>未选中 - 编码属性域和子类型值将导出为原始值。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use domain and subtype descriptions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _use_domains_value _use_domains { get; set; } = _use_domains_value._false;

        public enum _use_domains_value
        {
            /// <summary>
            /// <para>USE_CODED_VALUE_NAMES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USE_CODED_VALUE_NAMES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DONT_USE_CODED_VALUE_NAMES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DONT_USE_CODED_VALUE_NAMES")]
            [GPEnumValue("false")]
            _false,

        }

        public ExportDiagramContent SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}